/**
 *
 * 版权所有 © cybersky.com
 *
 */
package cn.cybertron.primus.report;

import java.util.UUID;

import org.nutz.log.Log;
import org.nutz.log.Logs;
import org.nutz.mvc.NutConfig;

import cn.cybertron.matrix.Cybertron;
import cn.cybertron.primus.appservice.AbstractAppService;
import cn.cybertron.primus.base.RepeatNameException;
import cn.cybertron.primus.endpoint.data.type.EndpointTypeDataStoreES;
import cn.cybertron.primus.report.entity.ReportObject;
import cn.cybertron.primus.report.schedule.ReportScheduleManager;

/**
 * 报表管理器，负责报表的基本维护、管理操作、调度，单例
 * @author ch
 *
 */
public class ReportManager extends AbstractAppService {
	
	private static final Log logger = Logs.get();
	
	private static final ReportManager me = new ReportManager();
	
	public static final ReportManager me() {
		return me;
	}
	
	/**
	 * 构造函数
	 */
	private ReportManager() {
		
	}
	
	/**
	 * 加载时即读取当前的报表和报表组，并存入缓存
	 */
	@Override
	public void init(NutConfig config) {
		// 数据节点不启动报表调度引擎
		if(Cybertron.eptype != EndpointTypeDataStoreES.class)
			ReportScheduleManager.me().init(config);
	}

	@Override
	public void destroy(NutConfig config) {
		
	}
	
	/**
	 * 添加报表创建中间表
	 *  判断是否有相同中间表，有则引用
	 * @param report
	 * @return
	 * @throws RepeatNameException
	 *  判断是否存在同名报表
	 */
	public String addReport(ReportObject report) throws RepeatNameException {
		try {
			String uuid = UUID.randomUUID().toString();
			if(report != null) {
				report.setUuid(uuid);
				
			}
			return uuid;
		} catch (Exception e) {
			logger.error("", e);
			throw new RepeatNameException();
		}
	}
	
	
}

